package xyz.xmh.pattern.structural.filterpattern;

import java.util.List;

/**
 * AndCriteria
 * 符合两个标准的集合
 *
 * @author xuMingHai
 * @since 2021/4/30 星期五 14:19
 */
public class AndCriteria implements Criteria {

    /**
     * 标准
     */
    private final Criteria criteria;

    /**
     * 其他标准
     */
    private final Criteria otherCriteria;

    public AndCriteria(Criteria criteria, Criteria otherCriteria) {
        this.criteria = criteria;
        this.otherCriteria = otherCriteria;
    }

    /**
     * 符合两个标准的集合
     *
     * @param personList 人集合
     * @return 过滤后的集合
     */
    @Override
    public List<Person> meetCriteria(List<Person> personList) {
        // 第一次过滤，符合第一个标准
        List<Person> firstCriteriaPersonList = criteria.meetCriteria(personList);
        // 第二个标准过滤第一个标准，剩下的就是同时符合两个标准的
        return otherCriteria.meetCriteria(firstCriteriaPersonList);
    }

}
